package com.urbane.order.dto;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.List;

/**
 * 创建订单请求 DTO
 * 功能：
 *   - 前端提交购物车快照、收货地址、优惠券、积分等信息
 *   - 用于 OrderService.createOrder() 方法
 *
 * 注意：
 *   - 所有字段均来自 cart-service 的快照，不可信任前端传值
 *   - 服务端需重新校验商品是否存在、库存是否充足、优惠券是否有效
 */
@Data
public class CreateOrderRequest {

    @NotNull(message = "用户 ID 不能为空")
    private Long userId;

    @NotNull(message = "收货地址 ID 不能为空")
    private Long addressId;

    @NotNull(message = "购物车项不能为空")
    private List<OrderItemRequest> items;

    private Long couponId; // 使用的优惠券 ID

    private Integer usedPoints; // 使用的积分数量

    private String remark; // 用户备注

    // ========== 内部类：购物车项 ==========
    @Data
    public static class OrderItemRequest {
        @NotNull(message = "SKU ID 不能为空")
        private Long skuId;

        @NotNull(message = "购买数量不能为空")
        @Min(value = 1, message = "购买数量必须大于等于1")
        private Integer quantity;

        // 注意：价格、名称、属性等从 product-service 获取快照，此处不传
    }
}